<?php
/**
 * Created by PhpStorm.
 * Author: wxy
 * Date: 2023/5/09
 * Time: 12:01
 */

namespace App\backend\models;


use App\common\models\BaseModel;
use Illuminate\Support\Facades\DB;

/**
 * Class AdminUsersModel
 * @package app\backend\models
 */
class AdminUsersModel extends BaseModel
{
    const table = 'admin_users';

    public function __construct() {

    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function rules()
    {
        return [];
    }

    /**
     * 添加/编辑 操作员字段规则
     *
     * @return array
     */
    static public function modify_rules()
    {
        return [
            'id' => 'int', // 会员id
            'username' => 'required|string|max:20', //用户名
            'password' => 'required|string', //密码
            'confirm_password' => 'required|string|same:password', //确认密码
            'member_id' => 'int', //会员id
            'role_id' => 'required|int', //角色id
            'name' => 'required|string', //员工姓名
            'phone' => 'required|string', //手机号
        ];
    }

    /**
     * 删除
     *
     * @return array
     */
    static public function update_rules()
    {
        return [
            'id' => 'required|int', // 用户ID
        ];
    }

    /**
     * 字段验证返回错误信息
     *
     * @return array
     */
    static public function message()
    {
        return [
            'id.required' => '用户ID不能为空',
            'username.required' => '账号不能为空',
            'username.max' => '账号长度超过限制',
            'password.required' => '密码不能为空',
            'confirm_password.required' => '确认密码不能为空',
            'confirm_password.same' => '确认密码要和密码一致',
            'role_id.required' => '角色不能为空',
            'name.required' => '员工姓名不能为空',
            'phone.required' => '联系方式不能为空',
        ];
    }

    /**
     * 数据库 - 查询操作员列表
     * @param $page string //分页页数
     * @param $limit string //分页条数
     * @param $where_in_data array //in 查询条件 参数数组
     * @param $where_data array //查询条件 参数数组
     * @return array
     */
    static public function listed($page, $limit, $where_data = [], $where_in_data = [])
    {
        $query = DB::table(self::table.' as au')
            ->leftJoin('admin_role_users as aru','au.id','=','aru.user_id')
            ->leftJoin('admin_roles as ar','aru.role_id','=','ar.id')
            ->leftJoin('admin_users as aua', 'au.operator_id','=','aua.id')
            ->select('au.id', 'au.username', 'au.name', 'au.phone', 'au.status', 'au.operator_id', 'au.created_at', 'ar.name as role_name', 'aua.name as operator_name')
            ->where(['au.is_deleted' => '0']);

        if (!empty($where_in_data)) {
            $query->whereIn('id', $where_in_data);
        }

        $data = $query->apiPaginate($limit, ['*'], 'page', $page)->toArray();

        return $data;
    }

    /**
     * 数据库 - 删除人员/改变状态
     *
     * @param $where_data array //查询条件 参数数组
     * @param $update_data array //更新 参数数组
     * @return array
     */
    static public function deleteds($where_data, $update_data)
    {
        $data = DB::table(self::table)
            ->where($where_data)
            ->update($update_data);

        return json_decode($data, true);
    }

    /**
     * 数据库 - 更新数据
     * @param $id   //卡券ID
     * @param $data //参数数组
     * @return array
     */
    static public function updatedData($id, $data)
    {
        $data = DB::table(self::table)
            ->where('id','=', $id)
            ->update($data);

        return $data;
    }

    /**
     * 数据库 - 插入数据
     * @param $data //参数数组
     * @return array
     */
    static public function insertData($data)
    {
        $data = DB::table(self::table)->insertGetId($data);
        return $data;
    }

    /**
     * 数据库 - 查询单条
     * @param $data //参数数组
     * @return array
     */
    static public function detail($where_data)
    {
        $data = DB::table(self::table)
            ->join('admin_role_users', 'admin_role_users.user_id', '=', 'admin_users.id')
            ->select('id', 'username', 'member_id', 'remark', 'name', 'role_id', 'phone')
            ->where($where_data)
            ->first();

        return $data;
    }

}
